#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
int main() {
  int n;
  cin >> n;
  // int* 的数组，每个元素都是 int*，用 int* + len 就可以代表任意长度的数组
  int** urls = new int*[n]; 
  // int** urls = (int**)malloc(n * sizeof(int*));
  // 需要额外有个数组记录长度
  int* len = new int[n]; 
  // int* len = (int*)malloc(n * sizeof(int));
  for (int i = 0; i < n; i ++) {
    cin >> len[i];
    urls[i] = new int[len[i]];
    // urls[i] = (int*)malloc(len[i] * sizeof(int));
    for (int j = 0; j < len[i]; j ++) {
      cin >> urls[i][j];
    }
  }
  bool* visited = new bool[n];
  // 注意使用 calloc
  // 如果使用 malloc 的话，需要用 memset 做清空
  // 不过如果没有反复申请释放，默认申请到的内存其实也都是 0
  // bool* visited = (bool*)calloc(n, 1);
  visited[0] = true;
  for (int i = 0; i < len[0]; i ++) {
    int id = urls[0][i] - 1;
    visited[id] = true;
    for (int j = 0; j < len[id]; j ++) {
      visited[urls[id][j] - 1] = true;
    }
  }
  int cnt = 0;
  for (int i = 0; i < n; i ++) {
    if (visited[i]) cnt++;
  }
  cout << cnt << endl;

  // 不手动释放也没关系，因为程序结束后会自动释放全部内存
  for (int i = 0; i < n; i ++) {
    // 需要挨个释放
    delete[] urls[i];
    // free(urls[i]);
  }
  delete[] urls;
  delete[] len;
  // free(urls);
  // free(len);
}